package czk.concrent.prictice;

/**
 * 犹豫模式
 * @Author:ChenZhangKun
 * @Date: 2020/6/7 14:11
 */
public class BalkingModel {
    public static void main(String[] args) {
        Balking balking=new Balking();
        for (int i = 0; i < 5; i++) {
            new Thread(()->{
                balking.init();
            }).start();
        }
    }
}
class Balking{
    // 保证可见行和不允许指令重排
    private static volatile boolean flag=false;
    public void init(){
        // 保证原子性
        synchronized (this){
            if (flag){
                return;
            }
        }
        flag=true;
        this.doInit();
    }
    public void doInit(){
        System.out.println("执行第一次");
    }
}
